<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //通过定义一个类observer,使用循环递归的方式将对象的所以属性变得可侦测的属性
        class Observer{
            constructor(value){
                this.value = value;
                if (Array.isArray(value)) {
                    //当value是数组的时候，用数组的侦听方式
                }else{
                    //当对象的时候调用walk实习循环侦测属性
                    this.walk(value)
                }
            }
            walk(obj){
                //获取对象的所有属性和列表
                const key = Object.key(obj)
                for (let i = 0; i < array.length; i++) {
                    defineReactive(obj,keys[i])
                    
                }
            }
        }
        function defineReactive(obj,key,value){
            //当只传入2个值的时候，可以直接获取第三个value值
            if (arguments.length == 2) {
                value = obj[key]

            }
        }
        //如果属性的值value也是对象也需要将其变成可侦测
        if (typeof value == 'object') {
            new Observer(value)
        }

        Object.defineProperty(obj,key,{
        enumerable : true,
        configurable: true,

        get(){
            console.log(`现在取${key}属性数据`);
            console.log(type);
          
            return content
        },
        set(newValue){
            if (val == newValue) {
                return 
            }
            console.log(`现在存入${key}属性数据`);
           value = newValue
        }
    })


        let user = {
        name : '老郑',
        content: '帅',
        friend: {
            username: '隔壁老王'
        }
    }
      new Observer(user)
    </script>
    
</body>
</html>